From 0fd9a9f411de32dff4a6a51d5632ba6faea4996c Mon Sep 17 00:00:00 2001 From: "kaf24@localhost.localdomain" Date: Fri, 27 Oct 2006 18:02:40 +0100 Subject: [PATCH] [HVM] Ensure that, if AP is blocked, it is woken by interrupt delivered by IOAPIC. This fixes 64-bit SMP Windows 2k3 boot. Signed-off-by: Xiaowei Yang Signed-off-by: Xin Li --- xen/arch/x86/hvm/vioapic.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/hvm/vioapic.c b/xen/arch/x86/hvm/vioapic.c index e608b24fbf..cb71c59ee2 100644 --- a/xen/arch/x86/hvm/vioapic.c +++ b/xen/arch/x86/hvm/vioapic.c @@ -39,6 +39,7 @@ #include #include #include +#include /* HACK: Route IRQ0 only to VCPU0 to prevent time jumps. */ #define IRQ0_SPECIAL_ROUTING 1 @@ -455,9 +456,10 @@ static void ioapic_deliver(hvm_vioapic_t *s, int irqno) #endif target = apic_round_robin(s->domain, dest_mode, vector, deliver_bitmask); - if (target) + if (target) { ioapic_inj_irq(s, target, vector, trig_mode, delivery_mode); - else + vcpu_kick(target->vcpu); + } else HVM_DBG_LOG(DBG_LEVEL_IOAPIC, "null round robin mask %x vector %x delivery_mode %x\n", deliver_bitmask, vector, dest_LowestPrio); @@ -478,8 +480,10 @@ static void ioapic_deliver(hvm_vioapic_t *s, int irqno) else #endif target = s->lapic_info[bit]; - if (target) + if (target) { ioapic_inj_irq(s, target, vector, trig_mode, delivery_mode); + vcpu_kick(target->vcpu); + } } break; } -- 2.30.2